1 // Fig. 9.9: circle2.h 2 // Definition of class Circle 3 #ifndef CIRCLE2_H 4 #define CIRCLE2_H 5 6 #include "point2.h" 7 8 class Circle : public Point { 9 friend ostream &operator<<( ostream &, const Circle & ); 10 public: 11 // default constructor 12 Circle( double r = 0.0, int x = 0, int y = 0 ); 13 void setRadius( double ); // set radius 14 double getRadius() const; // return radius 15 double area() const; // calculate area 16 protected: // accessible to derived classes 17 double radius; // radius of the Circle 18 }; 19 20 #endif 21 22 23 // Fig. 9.9: circle2.cpp 24 // Member function definitions for class Circle 25 #include 26 #include 27 #include "circle2.h" 28 29 // Constructor for Circle calls constructor for Point 30 // with a member initializer and initializes radius 31 Circle::Circle( double r, int a, int b ) 32 : Point( a, b ) // call base-class constructor 33 { setRadius( r ); } 34 35 // Set radius 36 void Circle::setRadius( double r ) 37 { radius = ( r >= 0 ? r : 0 ); } 38 39 // Get radius 40 double Circle::getRadius() const { return radius; } 41 42 43 // Calculate area of Circle 44 double Circle::area() const 45 { return 3.14159 * radius * radius; } 46 47 // Output a circle in the form: 48 // Center = [x, y]; Radius = #.## 49 ostream &operator<<( ostream &output, const Circle &c ) 50 { 51 output << "Center = " << static_cast< Point > ( c ) 52 << "; Radius = " 53 << setiosflags( ios::fixed | ios::showpoint ) 54 << setprecision( 2 ) << c.radius; 55 56 return output; // enables cascaded calls 57 } 58 59 60 // Fig. 9.9: fig09_09.cpp 61 // Driver for class Circle 62 #include 63 #include "point2.h" 64 #include "circle2.h" 65 66 int main() 67 { 68 Circle c( 2.5, 37, 43 ); 69 70 cout << "X coordinate is " << c.getX() 71 << "\nY coordinate is " << c.getY() 72 << "\nRadius is " << c.getRadius(); 73 74 c.setRadius( 4.25 ); 75 c.setPoint( 2, 2 ); 76 cout << "\n\nThe new location and radius of c are\n" 77 << c << "\nArea " << c.area() << '\n'; 78 79 Point &pRef = c; 80 cout << "\nCircle printed as a Point is: " << pRef << endl; 81 82 return 0; 83 }